package Object类;

import java.util.Objects;

public class PersonForEquals {
    private String name;
    private int age;


    public PersonForEquals() {
    }

    public PersonForEquals(String name, int age) {
        this.name = name;
        this.age = age;
    }

    //重写equals方法，让其比较对象
    /*
     * 由于person类是Object类的子类，所以存在多态
     * Object obj=new Person();
     * 多态特点：无法使用子类特有内容
     * 如果要比较,则要将其向下转型为person
     * */

    // @Override
    // public boolean equals(Object obj) {
    //    //如果传递的是本身，则直接返回true
    //     if (obj == this) {
    //         return true;
    //     }
    //
    //     //如果传递的是null直接返回
    //     if (obj == null) {
    //         return false;
    //     }
    //     //增加类型判断，如果不是PersonForEquals则返回false
    //     if (obj instanceof PersonForEquals) {
    //         //要将其向下转型为person
    //         PersonForEquals p = (PersonForEquals) obj;
    //         //对比两个对象的属性，一个是调用方法的属性，一个是转型后的p（obj）
    //         return this.age == p.getAge() && this.name == p.getName();
    //     } else {
    //         return false;
    //     }
    // }


    @Override
    public boolean equals(Object o) {
        //如果传递的是他自身，直接返回true
        if (this == o) {
            return true;
        }
        //如果传递的是空或者不是相同的类，返回false       其中getclass（）等效于instanceof
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        //将o强制转换成目标类 that代表this的复制
        PersonForEquals that = (PersonForEquals) o;
        //Objects类是工具类
        return age == that.age && Objects.equals(name, that.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
